A software artifact is a persistent representation of an aspect of a software system. Common examples of software artifacts are files and directories containing the source code of a software system, but other examples of artifact include requirements, end-user documentation, system models, and system tests. A significant state of a software artifact is saved as a version of that artifact, and the sets of versions of a given artifact define the history of that artifact.
A software confirmation is a set of software artifact versions, where only one version of a given artifact is elected by a given software configuration. A software change set identifies a logical change to a configuration, and consists of a set of one or more changes to one or more artifacts. An alternative characterization of a software configuration is that is consists of the set of change sets that have resulted in that configuration. The result of merging two software configurations is logically the union of the corresponding two sets of change sets.
A logical change set can span multiple artifacts in a configuration, but merge tools operate on one artifact at a time. When a signal artifact is merged during a configuration merge, a user accepts or reflects a change that is part of a particular change set. But when that user subsequently merges another artifact in that configuration containing additional changes which are part of that same change set, the user is given no guidance about how the has previously treated that change set. As a result, he must notice when the is encountering a logically related change, and then either must remember whether he previously accepted or rejected that change or must correctly reconstruct the logic that caused him to accept or reject that change. Since a user usually encounters multiple logical changes in a singe artifact, and since merge decisions are often very complex and require hours (or sometimes days) to resolve, it can be very difficult to recognize logically related merge decisions in a subsequent artifact, and very difficult to remember or to reproduce the logic that led to a particular merge decision.
Some domain-specific merge tools (such as tools for a specific language) are designed to operate concurrently on multiple artifacts from that domain. However, these merge tools cannot deal with artifacts from other domains, so the same problem arises when a logical change results in changes to multiple domains.